{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 机器学习纳米学位\n",
    "## 监督学习\n",
    "## 项目2: 为*CharityML*寻找捐献者"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "欢迎来到机器学习工程师纳米学位的第二个项目！在此文件中，有些示例代码已经提供给你，但你还需要实现更多的功能让项目成功运行。除非有明确要求，你无须修改任何已给出的代码。以**'练习'**开始的标题表示接下来的代码部分中有你必须要实现的功能。每一部分都会有详细的指导，需要实现的部分也会在注释中以'TODO'标出。请仔细阅读所有的提示！\n",
    "\n",
    "除了实现代码外，你还必须回答一些与项目和你的实现有关的问题。每一个需要你回答的问题都会以**'问题 X'**为标题。请仔细阅读每个问题，并且在问题后的**'回答'**文字框中写出完整的答案。我们将根据你对问题的回答和撰写代码所实现的功能来对你提交的项目进行评分。\n",
    ">**提示：**Code 和 Markdown 区域可通过**Shift + Enter**快捷键运行。此外，Markdown可以通过双击进入编辑模式。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 开始\n",
    "\n",
    "在这个项目中，你将使用1994年美国人口普查收集的数据，选用几个监督学习算法以准确地建模被调查者的收入。然后，你将根据初步结果从中选择出最佳的候选算法，并进一步优化该算法以最好地建模这些数据。你的目标是建立一个能够准确地预测被调查者年收入是否超过50000美元的模型。这种类型的任务会出现在那些依赖于捐款而存在的非营利性组织。了解人群的收入情况可以帮助一个非营利性的机构更好地了解他们要多大的捐赠，或是否他们应该接触这些人。虽然我们很难直接从公开的资源中推断出一个人的一般收入阶层，但是我们可以（也正是我们将要做的）从其他的一些公开的可获得的资源中获得一些特征从而推断出该值。\n",
    "\n",
    "这个项目的数据集来自[UCI机器学习知识库](https://archive.ics.uci.edu/ml/datasets/Census+Income)。这个数据集是由Ron Kohavi和Barry Becker在发表文章_\"Scaling Up the Accuracy of Naive-Bayes Classifiers: A Decision-Tree Hybrid\"_之后捐赠的，你可以在Ron Kohavi提供的[在线版本](https://www.aaai.org/Papers/KDD/1996/KDD96-033.pdf)中找到这个文章。我们在这里探索的数据集相比于原有的数据集有一些小小的改变，比如说移除了特征`'fnlwgt'` 以及一些遗失的或者是格式不正确的记录。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----\n",
    "## 探索数据\n",
    "运行下面的代码单元以载入需要的Python库并导入人口普查数据。注意数据集的最后一列`'income'`将是我们需要预测的列（表示被调查者的年收入会大于或者是最多50,000美元），人口普查数据中的每一列都将是关于被调查者的特征。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 检查你的Python版本\n",
    "from sys import version_info\n",
    "if version_info.major != 2 and version_info.minor != 7:\n",
    "    raise Exception('请使用Python 2.7来完成此项目')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>workclass</th>\n",
       "      <th>education_level</th>\n",
       "      <th>education-num</th>\n",
       "      <th>marital-status</th>\n",
       "      <th>occupation</th>\n",
       "      <th>relationship</th>\n",
       "      <th>race</th>\n",
       "      <th>sex</th>\n",
       "      <th>capital-gain</th>\n",
       "      <th>capital-loss</th>\n",
       "      <th>hours-per-week</th>\n",
       "      <th>native-country</th>\n",
       "      <th>income</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>39</td>\n",
       "      <td>State-gov</td>\n",
       "      <td>Bachelors</td>\n",
       "      <td>13.0</td>\n",
       "      <td>Never-married</td>\n",
       "      <td>Adm-clerical</td>\n",
       "      <td>Not-in-family</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>2174.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   age   workclass education_level  education-num  marital-status  \\\n",
       "0   39   State-gov       Bachelors           13.0   Never-married   \n",
       "\n",
       "      occupation    relationship    race    sex  capital-gain  capital-loss  \\\n",
       "0   Adm-clerical   Not-in-family   White   Male        2174.0           0.0   \n",
       "\n",
       "   hours-per-week  native-country income  \n",
       "0            40.0   United-States  <=50K  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 为这个项目导入需要的库\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from time import time\n",
    "from IPython.display import display # 允许为DataFrame使用display()\n",
    "\n",
    "# 导入附加的可视化代码visuals.py\n",
    "import visuals as vs\n",
    "\n",
    "# 为notebook提供更加漂亮的可视化\n",
    "%matplotlib inline\n",
    "\n",
    "# 导入人口普查数据\n",
    "data = pd.read_csv(\"census.csv\")\n",
    "\n",
    "# 成功 - 显示第一条记录\n",
    "display(data.head(n=1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 练习：数据探索\n",
    "首先我们对数据集进行一个粗略的探索，我们将看看每一个类别里会有多少被调查者？并且告诉我们这些里面多大比例是年收入大于50,000美元的。在下面的代码单元中，你将需要计算以下量：\n",
    "\n",
    "- 总的记录数量，`'n_records'`\n",
    "- 年收入大于50,000美元的人数，`'n_greater_50k'`.\n",
    "- 年收入最多为50,000美元的人数 `'n_at_most_50k'`.\n",
    "- 年收入大于50,000美元的人所占的比例， `'greater_percent'`.\n",
    "\n",
    "**提示：** 您可能需要查看上面的生成的表，以了解`'income'`条目的格式是什么样的。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['<=50K', '<=50K', '<=50K', ..., '<=50K', '<=50K', '>50K'], dtype=object)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data['income'].values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total number of records: 45222\n",
      "Individuals making more than $50,000: 11208\n",
      "Individuals making at most $50,000: 34014\n",
      "Percentage of individuals making more than $50,000: 24.78%\n"
     ]
    }
   ],
   "source": [
    "# TODO：总的记录数\n",
    "n_records = data.shape[0]\n",
    "\n",
    "# TODO：被调查者的收入大于$50,000的人数\n",
    "n_greater_50k = data[data['income'] == '>50K'].shape[0]\n",
    "\n",
    "# TODO：被调查者的收入最多为$50,000的人数\n",
    "n_at_most_50k = data[data['income'] == '<=50K'].shape[0]\n",
    "\n",
    "# TODO：被调查者收入大于$50,000所占的比例\n",
    "greater_percent = float(n_greater_50k) / n_records * 100\n",
    "\n",
    "# 打印结果\n",
    "print \"Total number of records: {}\".format(n_records)\n",
    "print \"Individuals making more than $50,000: {}\".format(n_greater_50k)\n",
    "print \"Individuals making at most $50,000: {}\".format(n_at_most_50k)\n",
    "print \"Percentage of individuals making more than $50,000: {:.2f}%\".format(greater_percent)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----\n",
    "## 准备数据\n",
    "在数据能够被作为输入提供给机器学习算法之前，它经常需要被清洗，格式化，和重新组织 - 这通常被叫做**预处理**。幸运的是，对于这个数据集，没有我们必须处理的无效或丢失的条目，然而，由于某一些特征存在的特性我们必须进行一定的调整。这个预处理都可以极大地帮助我们提升几乎所有的学习算法的结果和预测能力。\n",
    "\n",
    "### 获得特征和标签\n",
    "`income` 列是我们需要的标签，记录一个人的年收入是否高于50K。 因此我们应该把他从数据中剥离出来，单独存放。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 将数据切分成特征和对应的标签\n",
    "income_raw = data['income']\n",
    "features_raw = data.drop('income', axis = 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 转换倾斜的连续特征\n",
    "\n",
    "一个数据集有时可能包含至少一个靠近某个数字的特征，但有时也会有一些相对来说存在极大值或者极小值的不平凡分布的的特征。算法对这种分布的数据会十分敏感，并且如果这种数据没有能够很好地规一化处理会使得算法表现不佳。在人口普查数据集的两个特征符合这个描述：'`capital-gain'`和`'capital-loss'`。\n",
    "\n",
    "运行下面的代码单元以创建一个关于这两个特征的条形图。请注意当前的值的范围和它们是如何分布的。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\ntAkIAACg7Q67WtJh1lQp5QAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f37e169acd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化 'capital-gain'和'capital-loss' 两个特征\n",
    "vs.distribution(features_raw)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于高度倾斜分布的特征如`'capital-gain'`和`'capital-loss'`，常见的做法是对数据施加一个<a href=\"https://en.wikipedia.org/wiki/Data_transformation_(statistics)\">对数转换</a>，将数据转换成对数，这样非常大和非常小的值不会对学习算法产生负面的影响。并且使用对数变换显著降低了由于异常值所造成的数据范围异常。但是在应用这个变换时必须小心：因为0的对数是没有定义的，所以我们必须先将数据处理成一个比0稍微大一点的数以成功完成对数转换。\n",
    "\n",
    "运行下面的代码单元来执行数据的转换和可视化结果。再次，注意值的范围和它们是如何分布的。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f37aafcf250>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 对于倾斜的数据使用Log转换\n",
    "skewed = ['capital-gain', 'capital-loss']\n",
    "features_raw[skewed] = data[skewed].apply(lambda x: np.log(x + 1))\n",
    "\n",
    "# 可视化对数转换后 'capital-gain'和'capital-loss' 两个特征\n",
    "vs.distribution(features_raw, transformed = True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 规一化数字特征\n",
    "除了对于高度倾斜的特征施加转换，对数值特征施加一些形式的缩放通常会是一个好的习惯。在数据上面施加一个缩放并不会改变数据分布的形式（比如上面说的'capital-gain' or 'capital-loss'）；但是，规一化保证了每一个特征在使用监督学习器的时候能够被平等的对待。注意一旦使用了缩放，观察数据的原始形式不再具有它本来的意义了，就像下面的例子展示的。\n",
    "\n",
    "运行下面的代码单元来规一化每一个数字特征。我们将使用[`sklearn.preprocessing.MinMaxScaler`](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html)来完成这个任务。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>workclass</th>\n",
       "      <th>education_level</th>\n",
       "      <th>education-num</th>\n",
       "      <th>marital-status</th>\n",
       "      <th>occupation</th>\n",
       "      <th>relationship</th>\n",
       "      <th>race</th>\n",
       "      <th>sex</th>\n",
       "      <th>capital-gain</th>\n",
       "      <th>capital-loss</th>\n",
       "      <th>hours-per-week</th>\n",
       "      <th>native-country</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.30137</td>\n",
       "      <td>State-gov</td>\n",
       "      <td>Bachelors</td>\n",
       "      <td>0.8</td>\n",
       "      <td>Never-married</td>\n",
       "      <td>Adm-clerical</td>\n",
       "      <td>Not-in-family</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>0.02174</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.397959</td>\n",
       "      <td>United-States</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       age   workclass education_level  education-num  marital-status  \\\n",
       "0  0.30137   State-gov       Bachelors            0.8   Never-married   \n",
       "\n",
       "      occupation    relationship    race    sex  capital-gain  capital-loss  \\\n",
       "0   Adm-clerical   Not-in-family   White   Male       0.02174           0.0   \n",
       "\n",
       "   hours-per-week  native-country  \n",
       "0        0.397959   United-States  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "# 初始化一个 scaler，并将它施加到特征上\n",
    "scaler = MinMaxScaler()\n",
    "numerical = ['age', 'education-num', 'capital-gain', 'capital-loss', 'hours-per-week']\n",
    "features_raw[numerical] = scaler.fit_transform(data[numerical])\n",
    "\n",
    "# 显示一个经过缩放的样例记录\n",
    "display(features_raw.head(n = 1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 练习：数据预处理\n",
    "\n",
    "从上面的**数据探索**中的表中，我们可以看到有几个属性的每一条记录都是非数字的。通常情况下，学习算法期望输入是数字的，这要求非数字的特征（称为类别变量）被转换。转换类别变量的一种流行的方法是使用**独热编码**方案。独热编码为每一个非数字特征的每一个可能的类别创建一个_“虚拟”_变量。例如，假设`someFeature`有三个可能的取值`A`，`B`或者`C`，。我们将把这个特征编码成`someFeature_A`, `someFeature_B`和`someFeature_C`.\n",
    "\n",
    "| 特征X |                    | 特征X_A | 特征X_B | 特征X_C |\n",
    "| :-: |                            | :-: | :-: | :-: |\n",
    "|  B  |  | 0 | 1 | 0 |\n",
    "|  C  | ----> 独热编码 ----> | 0 | 0 | 1 |\n",
    "|  A  |  | 1 | 0 | 0 |\n",
    "\n",
    "此外，对于非数字的特征，我们需要将非数字的标签`'income'`转换成数值以保证学习算法能够正常工作。因为这个标签只有两种可能的类别（\"<=50K\"和\">50K\"），我们不必要使用独热编码，可以直接将他们编码分别成两个类`0`和`1`，在下面的代码单元中你将实现以下功能：\n",
    " - 使用[`pandas.get_dummies()`](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html?highlight=get_dummies#pandas.get_dummies)对`'features_raw'`数据来施加一个独热编码。\n",
    " - 将目标标签`'income_raw'`转换成数字项。\n",
    "   - 将\"<=50K\"转换成`0`；将\">50K\"转换成`1`。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "103 total features after one-hot encoding.\n",
      "['age', 'education-num', 'capital-gain', 'capital-loss', 'hours-per-week', 'workclass_ Federal-gov', 'workclass_ Local-gov', 'workclass_ Private', 'workclass_ Self-emp-inc', 'workclass_ Self-emp-not-inc', 'workclass_ State-gov', 'workclass_ Without-pay', 'education_level_ 10th', 'education_level_ 11th', 'education_level_ 12th', 'education_level_ 1st-4th', 'education_level_ 5th-6th', 'education_level_ 7th-8th', 'education_level_ 9th', 'education_level_ Assoc-acdm', 'education_level_ Assoc-voc', 'education_level_ Bachelors', 'education_level_ Doctorate', 'education_level_ HS-grad', 'education_level_ Masters', 'education_level_ Preschool', 'education_level_ Prof-school', 'education_level_ Some-college', 'marital-status_ Divorced', 'marital-status_ Married-AF-spouse', 'marital-status_ Married-civ-spouse', 'marital-status_ Married-spouse-absent', 'marital-status_ Never-married', 'marital-status_ Separated', 'marital-status_ Widowed', 'occupation_ Adm-clerical', 'occupation_ Armed-Forces', 'occupation_ Craft-repair', 'occupation_ Exec-managerial', 'occupation_ Farming-fishing', 'occupation_ Handlers-cleaners', 'occupation_ Machine-op-inspct', 'occupation_ Other-service', 'occupation_ Priv-house-serv', 'occupation_ Prof-specialty', 'occupation_ Protective-serv', 'occupation_ Sales', 'occupation_ Tech-support', 'occupation_ Transport-moving', 'relationship_ Husband', 'relationship_ Not-in-family', 'relationship_ Other-relative', 'relationship_ Own-child', 'relationship_ Unmarried', 'relationship_ Wife', 'race_ Amer-Indian-Eskimo', 'race_ Asian-Pac-Islander', 'race_ Black', 'race_ Other', 'race_ White', 'sex_ Female', 'sex_ Male', 'native-country_ Cambodia', 'native-country_ Canada', 'native-country_ China', 'native-country_ Columbia', 'native-country_ Cuba', 'native-country_ Dominican-Republic', 'native-country_ Ecuador', 'native-country_ El-Salvador', 'native-country_ England', 'native-country_ France', 'native-country_ Germany', 'native-country_ Greece', 'native-country_ Guatemala', 'native-country_ Haiti', 'native-country_ Holand-Netherlands', 'native-country_ Honduras', 'native-country_ Hong', 'native-country_ Hungary', 'native-country_ India', 'native-country_ Iran', 'native-country_ Ireland', 'native-country_ Italy', 'native-country_ Jamaica', 'native-country_ Japan', 'native-country_ Laos', 'native-country_ Mexico', 'native-country_ Nicaragua', 'native-country_ Outlying-US(Guam-USVI-etc)', 'native-country_ Peru', 'native-country_ Philippines', 'native-country_ Poland', 'native-country_ Portugal', 'native-country_ Puerto-Rico', 'native-country_ Scotland', 'native-country_ South', 'native-country_ Taiwan', 'native-country_ Thailand', 'native-country_ Trinadad&Tobago', 'native-country_ United-States', 'native-country_ Vietnam', 'native-country_ Yugoslavia']\n"
     ]
    }
   ],
   "source": [
    "# TODO：使用pandas.get_dummies()对'features_raw'数据进行独热编码\n",
    "features = pd.get_dummies(features_raw)\n",
    "\n",
    "# TODO：将'income_raw'编码成数字值\n",
    "income = income_raw.apply(lambda x: 1 if x == '>50K' else 0)\n",
    "\n",
    "# 打印经过独热编码之后的特征数量\n",
    "encoded = list(features.columns)\n",
    "print \"{} total features after one-hot encoding.\".format(len(encoded))\n",
    "\n",
    "# 移除下面一行的注释以观察编码的特征名字\n",
    "print encoded"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 混洗和切分数据\n",
    "现在所有的 _类别变量_ 已被转换成数值特征，而且所有的数值特征已被规一化。和我们一般情况下做的一样，我们现在将数据（包括特征和它们的标签）切分成训练和测试集。其中80%的数据将用于训练和20%的数据用于测试。然后再进一步把训练数据分为训练集和验证集，用来选择和优化模型。\n",
    "\n",
    "运行下面的代码单元来完成切分。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training set has 28941 samples.\n",
      "Validation set has 7236 samples.\n",
      "Testing set has 9045 samples.\n"
     ]
    }
   ],
   "source": [
    "# 导入 train_test_split\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# 将'features'和'income'数据切分成训练集和测试集\n",
    "X_train, X_test, y_train, y_test = train_test_split(features, income, test_size = 0.2, random_state = 0,\n",
    "                                                    stratify = income)\n",
    "# 将'X_train'和'y_train'进一步切分为训练集和验证集\n",
    "X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=0,\n",
    "                                                    stratify = y_train)\n",
    "\n",
    "# 显示切分的结果\n",
    "print \"Training set has {} samples.\".format(X_train.shape[0])\n",
    "print \"Validation set has {} samples.\".format(X_val.shape[0])\n",
    "print \"Testing set has {} samples.\".format(X_test.shape[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----\n",
    "## 评价模型性能\n",
    "在这一部分中，我们将尝试四种不同的算法，并确定哪一个能够最好地建模数据。四种算法包含一个*天真的预测器* 和三个你选择的监督学习器。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 评价方法和朴素的预测器\n",
    "*CharityML*通过他们的研究人员知道被调查者的年收入大于\\$50,000最有可能向他们捐款。因为这个原因*CharityML*对于准确预测谁能够获得\\$50,000以上收入尤其有兴趣。这样看起来使用**准确率**作为评价模型的标准是合适的。另外，把*没有*收入大于\\$50,000的人识别成年收入大于\\$50,000对于*CharityML*来说是有害的，因为他想要找到的是有意愿捐款的用户。这样，我们期望的模型具有准确预测那些能够年收入大于\\$50,000的能力比模型去**查全**这些被调查者*更重要*。我们能够使用**F-beta score**作为评价指标，这样能够同时考虑查准率和查全率：\n",
    "\n",
    "$$ F_{\\beta} = (1 + \\beta^2) \\cdot \\frac{precision \\cdot recall}{\\left( \\beta^2 \\cdot precision \\right) + recall} $$\n",
    "\n",
    "\n",
    "尤其是，当 $\\beta = 0.5$ 的时候更多的强调查准率，这叫做**F$_{0.5}$ score** （或者为了简单叫做F-score）。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题 1 - 天真的预测器的性能\n",
    "\n",
    "通过查看收入超过和不超过 \\$50,000 的人数，我们能发现多数被调查者年收入没有超过 \\$50,000。如果我们简单地预测说*“这个人的收入没有超过 \\$50,000”*，我们就可以得到一个 准确率超过 50% 的预测。这样我们甚至不用看数据就能做到一个准确率超过 50%。这样一个预测被称作是天真的。通常对数据使用一个*天真的预测器*是十分重要的，这样能够帮助建立一个模型表现是否好的基准。 使用下面的代码单元计算天真的预测器的相关性能。将你的计算结果赋值给`'accuracy'`, `‘precision’`, `‘recall’` 和 `'fscore'`，这些值会在后面被使用，请注意这里不能使用scikit-learn，你需要根据公式自己实现相关计算。\n",
    "\n",
    "*如果我们选择一个无论什么情况都预测被调查者年收入大于 \\$50,000 的模型，那么这个模型在**验证集上**的准确率，查准率，查全率和 F-score是多少？*  \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Naive Predictor on validation data: \n",
      "     Accuracy score: 0.2478 \n",
      "     Precision: 0.2478 \n",
      "     Recall: 1.0000 \n",
      "     F-score: 0.2917\n"
     ]
    }
   ],
   "source": [
    "#不能使用scikit-learn，你需要根据公式自己实现相关计算。\n",
    "\n",
    "#TODO： 计算准确率\n",
    "pred = [1 for i in range(len(y_val))]\n",
    "TP = 0\n",
    "TN = 0\n",
    "FP = 0\n",
    "FN = 0\n",
    "for i in range(len(y_val)):\n",
    "    if pred[i] == 1 and y_val.values[i] == 1:\n",
    "        TP += 1\n",
    "    if pred[i] == 0 and y_val.values[i] == 0:\n",
    "        TN += 1\n",
    "    if pred[i] == 0 and y_val.values[i] == 1:\n",
    "        FP += 1\n",
    "    if pred[i] == 1 and y_val.values[i] == 0:\n",
    "        FN += 1\n",
    "        \n",
    "accuracy = float(TP + TN) / len(y_val)\n",
    "\n",
    "# TODO： 计算查准率 Precision\n",
    "precision = float(TP) / (TP + FN)\n",
    "\n",
    "# TODO： 计算查全率 Recall\n",
    "recall = float(TP) / (TP + FP)\n",
    "\n",
    "# TODO： 使用上面的公式，设置beta=0.5，计算F-score\n",
    "beta = 0.5\n",
    "fscore = (1 + beta * beta) * (precision * recall) / (beta * beta * precision + recall)\n",
    "\n",
    "# 打印结果\n",
    "print \"Naive Predictor on validation data: \\n \\\n",
    "    Accuracy score: {:.4f} \\n \\\n",
    "    Precision: {:.4f} \\n \\\n",
    "    Recall: {:.4f} \\n \\\n",
    "    F-score: {:.4f}\".format(accuracy, precision, recall, fscore)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 监督学习模型\n",
    "### 问题 2 - 模型应用\n",
    "\n",
    "你能够在 [`scikit-learn`](http://scikit-learn.org/stable/supervised_learning.html) 中选择以下监督学习模型\n",
    "- 高斯朴素贝叶斯 (GaussianNB)\n",
    "- 决策树 (DecisionTree)\n",
    "- 集成方法 (Bagging, AdaBoost, Random Forest, Gradient Boosting)\n",
    "- K近邻 (K Nearest Neighbors)\n",
    "- 随机梯度下降分类器 (SGDC)\n",
    "- 支撑向量机 (SVM)\n",
    "- Logistic回归（LogisticRegression）\n",
    "\n",
    "从上面的监督学习模型中选择三个适合我们这个问题的模型，并回答相应问题。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 模型1\n",
    "\n",
    "**模型名称**\n",
    "\n",
    "回答：决策树\n",
    "\n",
    "\n",
    "**描述一个该模型在真实世界的一个应用场景。（你需要为此做点研究，并给出你的引用出处）**\n",
    "\n",
    "回答：\n",
    "\n",
    "在银行系统中，决策树用于评估用户的信用。（https://wenku.baidu.com/view/4c4cf21ea300a6c30c229f22.html ）\n",
    "\n",
    "**这个模型的优势是什么？他什么情况下表现最好？**\n",
    "\n",
    "回答：\n",
    "\n",
    "- 易于理解\n",
    "- 速度快\n",
    "- 在每个特征都能提供很多信息增益的时候表现最好\n",
    "\n",
    "**这个模型的缺点是什么？什么条件下它表现很差？**\n",
    "\n",
    "回答：\n",
    "\n",
    "- 枝叶过多时容易过拟合\n",
    "- 连续值难以表示\n",
    "- 在很多特征独自提供的信息增益很小时候表现很差\n",
    "\n",
    "**根据我们当前数据集的特点，为什么这个模型适合这个问题。**\n",
    "\n",
    "回答：\n",
    "\n",
    "这个数据集是一个分类问题，需要评估年收入是否超过50000美元。从案例来看，这和银行评估用户信用的应用场景很类似，而决策树已经广泛用于这个方面；从特征来看，教育水平等因素，凭生活直觉，和年收入关系很大，因此，决策书适合这个模型。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 模型2\n",
    "\n",
    "**模型名称**\n",
    "\n",
    "回答：高斯朴素贝叶斯\n",
    "\n",
    "\n",
    "**描述一个该模型在真实世界的一个应用场景。（你需要为此做点研究，并给出你的引用出处）**\n",
    "\n",
    "回答：\n",
    "用于垃圾邮件过滤\n",
    "https://zh.wikipedia.org/wiki/%E8%B2%9D%E8%91%89%E6%96%AF%E5%9E%83%E5%9C%BE%E9%83%B5%E4%BB%B6%E9%81%8E%E6%BF%BE\n",
    "\n",
    "**这个模型的优势是什么？他什么情况下表现最好？**\n",
    "\n",
    "回答：\n",
    "- 易于理解\n",
    "- 只通过小规模数据时就能得到较好的效果\n",
    "- 可直接由数学公式得出，效率高，易于实现\n",
    "- 也适用于连续值\n",
    "- 数学理论中要求特征独立，实际中当特征较少、相关性低的时候，表现最好\n",
    "\n",
    "**这个模型的缺点是什么？什么条件下它表现很差？**\n",
    "\n",
    "回答：\n",
    "- 涉及到随机的概率，不一定能把数据分类得很清楚\n",
    "- 特征之间相关性大、特征较多的时候，表现很差\n",
    "\n",
    "**根据我们当前数据集的特点，为什么这个模型适合这个问题。**\n",
    "\n",
    "回答：\n",
    "- 如果一个人年收入超过50000美元，那他教育水平高的概率比较大，因此如果已经知道一个人教育水平高，那他年收入超过50000美元的概率也相应提高了。由于年收入超过50000美元的群体具有一些特点的概率更高，所以适合这个问题。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 模型3\n",
    "\n",
    "**模型名称**\n",
    "\n",
    "回答：k近邻\n",
    "\n",
    "\n",
    "**描述一个该模型在真实世界的一个应用场景。（你需要为此做点研究，并给出你的引用出处）**\n",
    "\n",
    "回答：用于保险业精准营销 http://shujuren.org/article/168.html\n",
    "\n",
    "**这个模型的优势是什么？他什么情况下表现最好？**\n",
    "\n",
    "回答：\n",
    "- 不需要训练，可以直接用来预测\n",
    "- 在预测稀有对象时，表现最好\n",
    "\n",
    "**这个模型的缺点是什么？什么条件下它表现很差？**\n",
    "\n",
    "回答：\n",
    "- 预测时，样本越多，时间、空间资源消耗越大\n",
    "- 在数据互相穿插，边界混合、模糊不清的时候，表现很差\n",
    "\n",
    "**根据我们当前数据集的特点，为什么这个模型适合这个问题。**\n",
    "\n",
    "回答：年收入超过50000美元的人毕竟是少数，可以近似看作稀有对象。“人以类聚，物以群分”，如果一个人的各项特征和一个年收入超过50000美元的人更加接近，那么就可以认为他也是年收入超过50000美元，因此适合这个问题。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 练习 - 创建一个训练和预测的流水线\n",
    "为了正确评估你选择的每一个模型的性能，创建一个能够帮助你快速有效地使用不同大小的训练集并在验证集上做预测的训练和验证的流水线是十分重要的。\n",
    "你在这里实现的功能将会在接下来的部分中被用到。在下面的代码单元中，你将实现以下功能：\n",
    "\n",
    " - 从[`sklearn.metrics`](http://scikit-learn.org/stable/modules/classes.html#sklearn-metrics-metrics)中导入`fbeta_score`和`accuracy_score`。\n",
    " - 用训练集拟合学习器，并记录训练时间。\n",
    " - 对训练集的前300个数据点和验证集进行预测并记录预测时间。\n",
    " - 计算预测训练集的前300个数据点的准确率和F-score。\n",
    " - 计算预测验证集的准确率和F-score。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# TODO：从sklearn中导入两个评价指标 - fbeta_score和accuracy_score\n",
    "from sklearn.metrics import fbeta_score, accuracy_score\n",
    "\n",
    "def train_predict(learner, sample_size, X_train, y_train, X_val, y_val): \n",
    "    '''\n",
    "    inputs:\n",
    "       - learner: the learning algorithm to be trained and predicted on\n",
    "       - sample_size: the size of samples (number) to be drawn from training set\n",
    "       - X_train: features training set\n",
    "       - y_train: income training set\n",
    "       - X_val: features validation set\n",
    "       - y_val: income validation set\n",
    "    '''\n",
    "    \n",
    "    results = {}\n",
    "    \n",
    "    # TODO：使用sample_size大小的训练数据来拟合学习器\n",
    "    # TODO: Fit the learner to the training data using slicing with 'sample_size'\n",
    "    start = time() # 获得程序开始时间\n",
    "    learner = learner.fit(X_train[:sample_size], y_train[:sample_size])\n",
    "    end = time() # 获得程序结束时间\n",
    "    \n",
    "    # TODO：计算训练时间\n",
    "    results['train_time'] = end - start\n",
    "    \n",
    "    # TODO: 得到在验证集上的预测值\n",
    "    #       然后得到对前300个训练数据的预测结果\n",
    "    start = time() # 获得程序开始时间\n",
    "    predictions_val = learner.predict(X_val)\n",
    "    predictions_train = learner.predict(X_train[:300])\n",
    "    end = time() # 获得程序结束时间\n",
    "    \n",
    "    # TODO：计算预测用时\n",
    "    results['pred_time'] = end - start\n",
    "            \n",
    "    # TODO：计算在最前面的300个训练数据的准确率\n",
    "    results['acc_train'] = accuracy_score(y_train[:300], predictions_train)\n",
    "        \n",
    "    # TODO：计算在验证上的准确率\n",
    "    results['acc_val'] = accuracy_score(y_val, predictions_val)\n",
    "    \n",
    "    # TODO：计算在最前面300个训练数据上的F-score\n",
    "    results['f_train'] = fbeta_score(y_train[:300], predictions_train, 0.5)\n",
    "        \n",
    "    # TODO：计算验证集上的F-score\n",
    "    results['f_val'] = fbeta_score(y_val, predictions_val, 0.5)\n",
    "       \n",
    "    # 成功\n",
    "    print \"{} trained on {} samples.\".format(learner.__class__.__name__, sample_size)\n",
    "        \n",
    "    # 返回结果\n",
    "    return results"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 练习：初始模型的评估\n",
    "在下面的代码单元中，您将需要实现以下功能：             \n",
    "- 导入你在前面讨论的三个监督学习模型。             \n",
    "- 初始化三个模型并存储在`'clf_A'`，`'clf_B'`和`'clf_C'`中。\n",
    "  - 使用模型的默认参数值，在接下来的部分中你将需要对某一个模型的参数进行调整。             \n",
    "  - 设置`random_state`  (如果有这个参数)。       \n",
    "- 计算1%， 10%， 100%的训练数据分别对应多少个数据点，并将这些值存储在`'samples_1'`, `'samples_10'`, `'samples_100'`中\n",
    "\n",
    "**注意：**取决于你选择的算法，下面实现的代码可能需要一些时间来运行！"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DecisionTreeClassifier trained on 289 samples.\n",
      "DecisionTreeClassifier trained on 2894 samples.\n",
      "DecisionTreeClassifier trained on 28941 samples.\n",
      "GaussianNB trained on 289 samples.\n",
      "GaussianNB trained on 2894 samples.\n",
      "GaussianNB trained on 28941 samples.\n",
      "KNeighborsClassifier trained on 289 samples.\n",
      "KNeighborsClassifier trained on 2894 samples.\n",
      "KNeighborsClassifier trained on 28941 samples.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nwIuQe2PeqEi5GOZhhxUIhmEYhmEeVDIh92f4Q+4DOANgiBDC0GtqGYYpJdiEiWEYhmEYhmEYk+Ev\nUTMMwzAMwzAMYzKsQDAMwzAMwzAMYzKsQDAMwzAMwzAMYzKsQDAMwzAMwzAMYzKsQDAMwzAMwzAM\nYzKsQDAMwzAMwzAMYzKsQDAMwzAMwzAMYzKsQDAMwzAMwzAMYzKsQDAMwzAMwzAMYzKsQDAMwzAM\nwzAMYzKsQDAMwzAMwzAMYzKsQDAMwzAMwzAMYzKsQDAMwzAMwzAMYzKsQDAMwzAMwzAMYzKsQDAM\nwzAMwzAMYzKsQDAMwzAMwzAMYzKsQDAMwzAMwzAMYzKsQDAMwzAMwzAMYzKsQDAMwzAMwzAMYzIW\nFS0AU3YcOXKks4WFxRQhhDdYWWQYhmEY5tEmj4gScnJypjVp0mRLRQvzIENCiIqWgSkDjhw50tna\n2npRQEBAlq2tbYaZmRkXNMMwDMMwjyx5eXmUnp5uEx0dbZWZmfkmKxHFh2elH1IsLCymBAQEZNnb\n26ez8sAwDMMwzKOOmZmZsLe3Tw8ICMiysLCYUtHyPMiwAvGQIoTwtrW1zahoORiGYRiGYSoTtra2\nGcq8mykmrEA8vJjxygPDMAzDMEx+1PiIx8AlgDOPYRiGYRiGYRiTYQWCYUrI2LFjff39/etXtBzM\ng0Hz5s1r9enTp3pRrunVq1dAy5YtaxYU5kGoh2fOnLEioqZbtmxxKK80iajp559/7qo7v379ulnH\njh2DHB0dGxFR0zNnzlgVp0yYyoufn1+D8ePH+5gStiLqZGXj2WefDWzXrl1weaU3fPhwv5CQkHpa\nty+++MLVz8+vgbm5edPw8HD/9evXOxFR0/j4eH5baCWFC+YR4zt399DM5ORyLXdrN7ecvklJx4p6\n3dWrV82nT5/uvXnz5ipXrlyxsrS0FL6+vlkdO3a8OXr06GvBwcHZZSFvUZkyZUrCO++8c6204x07\ndqzvggULfLp06ZKyadOmC1o/CwuLpvPnz48eNWpUMiAfmFeuXLHS+bu4uOQ0btw4be7cuZcbN25c\nIXth3L/7LjQ5M7Nc65qbtXVOUt++RaprvXr1CoiPj7fau3fvWZ3b7t277Xr27BkSFhaWOmTIkKQX\nX3wxxMfHJysqKuqEnZ3dXdPAli1b1vTx8cnasGFDtKnp/frrr1GWlpYPpXnh999/7/zZZ595njhx\nwj4jI8PM29s7q2XLlrcmTpx4tWHDhpkVIVNMTMwxd3f3XN35vHnzPI8ePeqwbdu2M97e3tm+vr45\nD3KZuH/nHpqcWb59upu1W05S36L16b169Qr48ccf3QDA3NxcODo65gYGBmZ06dLlxvjx4xOdnJzy\nSku+gwcPnnJwcDApvqCgoKyYmJhjXl5euYWHNg1d311QmE8++eRu/12WXL582WLKlCnef/75Z5X4\n+HgrBweH3KCgoIxXXnklcejQodctLMp/GDhr1qz4yZMnJ+jO79y5Q2PGjAkYPnx4wqhRoxKdnJxy\n7ezshCqXnHIXkDEJXoF4xChv5aG4aUZFRVk2bty47i+//OIyduzY+J07d54+dOjQyblz58YlJyeb\nz5w5s9JsfnJ2ds7z8fEpk07O2tpabN682WXbtm32hYV94403EmJiYo5FR0f/t2HDhnOpqakW3bp1\nK7dZJX3KW3korTTXr1/v9PTTT9d65plnUn777bcLNjY2AgCuX79uOWPGDK+Sxu/l5ZXr6upaaoOl\nsiYjI4NMCTdu3Dif8PDw4Bo1amR+++23Uf/999+JJUuWXLSyshITJ070K2s5jeHv75+jVfqioqKs\nQ0JC0ps3b57u7++fY2FhUSplYmo+lTblrTyUJM2mTZumxcTEHIuKijq+ZcuWs717977+9ddfezZs\n2LBuXFxcqd2Hr69vjqkKiYWFBfz9/XOsra1LTYGcMmVKQkxMzDHd0ahRo9vPPffcda3bq6++el3/\nury8PGRnl9682OnTp62aNGlS988//6wyadKky/v27Tu5Y8eO0+Hh4Unz5s3zOX78uE2pJVYEnJ2d\n87y9ve8qbBcuXLDKzMyk7t273wgICMh2dXXNs7GxEf7+/jlmZsUfppZ2fjL5YQWCqZQMGzasenZ2\nNh07duzkiBEjrj/22GPpNWvWzHr22WdT16xZE/v111/HAcBPP/3k1Lx581rOzs6NHB0dG4WFhdXa\nsWOHnTYufRMGQM4c9+rVK0B3vnr16ip16tSpa2tr29jR0bFRgwYN6vz999+2AJCZmUlDhgyp6uXl\n1dDKyqqJh4dHw2effTZQd62+6cjp06etOnXqFOTp6dnQ1ta2cc2aNesuXrw4X/o6k4l33nnHx93d\nPdTZ2blRz549A27evJmvTXp6emZ17tw5Zfz48VULyzMHB4c8f3//nOrVq2e3a9fuzltvvZVw6dIl\n68TERHOTMp3BokWL3Pr16xc8evTo+JUrV8aam9/LusGDB1/97LPPvAtbUp85c6ZnjRo16llbWzep\nXr16/QkTJnhrH2L65jJpaWnUr1+/6o6Ojo2cnJwa9e/f33/EiBF+hsyR5s6d6+7r69vAwcGhcfv2\n7YMNDbq+/PJL16pVqzawtrZu0rJly5AzZ85Yaf0/++wzt6CgoHqWlpZNvLy8Go4aNcpXX77evXtX\nHz16tK+Hh0fDqlWrNgQKbiN//fWX3bx583wnTJhwedWqVbHPPPNMWs2aNbM6dep0OyIiIm7FihUx\nxvJr5MiRfoGBgfVsbW0be3t7NwwPD/dPTk6+m/HXr183e+GFFwLc3d1Draysmnh7ezccMmTI3faw\nZcsWhyZNmtS2t7dvbG9v37hWrVp1N2zY4KTz17Z/Pz+/BuvWrXPfv3+/IxE1bd68eS1DZWJKOfr5\n+TUYNWqUb//+/f2rVKnSSBcXYxwrKyvh7++fExAQkN28efP0CRMmJO7du/d0SkqKxZgxY+6WaWF5\nn52djbffftunWrVq9a2srJp4eno2HDhwYDWdv74JU0F115AJ07Fjx6zbtm0bbGdn19jOzq5x+/bt\ng0+cOGGt8//000/dLCwsmm7dutW+bt26dWxtbRvXq1evzq5du+wAOUD29/fP0R2WlpbC1tY2n5uD\ng4OYPXu2h52dXeMNGzY41apVq66VlVWTzZs3OwJyNS80NLS2jY1NEy8vr4Z9+/atrt+XL1682LVm\nzZp1ra2tm/j5+TV4/fXXq6alpd1VZF999dXqRIRjx46dHDZsWEqTJk0yGjZsmPnWW28lHz9+/GRw\ncHCWoXLavn27/RNPPBHi4uISam9v37hhw4a1N27c6KgNs3z5cpdatWrVtbW1bezk5NSoUaNGtQ8e\nPGgDAOnp6TRo0KBqnp6eDXXl8/zzzwfortWaMM2ePdujQYMG9QGgbdu2dYio6bZt2+wNmTAdPXrU\npkOHDkGOjo6NnJ2dGz355JMhhw8fvqsEFZSfTOnDCgRT6bh69ar5rl27nAcPHnzN2KygblYiNTXV\nbNiwYdd27959aseOHacDAwMzevToUTMhIcHkQXNsbKzFK6+8EtirV6/ko0ePRu7atev0iBEjrlpa\nWgIAZs2a5fnrr7+6fv311xcjIyNPrF+/Pqp58+ZpxuK7deuWedu2bW9t3Ljx3KFDh04OHDgwafTo\n0TV+/fXXfB3Zpk2bXK5fv27xxx9/nFm+fPmF7du3V5k8efJ9Kytz5869fPz4cfuIiIgqpt5TUlKS\n+dq1a10DAwMzPDw8Sm1p/mFm0qRJ3mPGjKk+f/78mFmzZiXo+48aNSrR3d09e+LEiUZNE8aOHeu7\nePFir2nTpl0+duzYidmzZ8etXLnSY9y4cb7GrnnzzTerbt26tcqXX3558a+//jrl7Oycu3LlSg/9\ncMePH7fbtWuX48aNG8/9/PPPZ8+cOWM7cuTIatowiYmJlkuXLvVYs2bN+a1bt55OS0sz79mzZ1Be\nnmxG3333nfNbb70V0Lt37+TDhw9HzpgxIy4iIsJTX77ffvvNNTEx0WLz5s1nN23adLawNrJ8+XI3\nGxubvMmTJ181dI8F1UFbW9u8zz//PObff/+N/Oqrry7u27fPcejQoXfva+zYsX7Hjx+3W7duXVRk\nZOSJVatWna9Tp04GIAeSvXv3Dm7SpEna/v37T+7fv//ke++9d8Xe3t5gv3Hw4MFTXbt2TdHNhP/6\n669RhsKZWo7ffPONl6enZ87u3btPLV++PNrYPTLGqVGjRnaPHj2St2zZUiU3N9ekvO/Tp0/A8uXL\nPSdOnHjl6NGjkWvXrj0fGBho0ESusLqrT1paGnXp0qVmZmam2ZYtW85s2bLlzO3bt826du0aol1l\nysvLw6RJk6rOnz8/bu/evafc3NxywsPDg4o6452VlWU2bdo034ULF8YeO3YsMiws7M66deucBg0a\nFBgeHp586NChyLVr154/d+6cTY8ePe5OXM2ePdvj/fffrzZ27NiEo0ePnvjyyy+j//jjD+chQ4b4\n6+573759TsOGDbvq7Ox8X3uwtbUVjo6OBtvJrVu3zMLDw5P//PPPM3v37j3ZsmXLtN69e4ecPn3a\nCgDOnTtnNXTo0MD+/fsnHT16NHLHjh2nhw4dek034TJt2jSvP/74o8qKFSsuREZGnvj++++jmjZt\nesdQWsOHD0/avHnzGQBYv379uZiYmGOtWrW6L+zFixct27dvX8vf3z9r+/btp3fu3Hm6WrVqWZ06\ndaqlVawM5WeRCoQxGd4DwVQ6Tp48aZ2Xl4e6devms91v3Lhx7TNnztgCgK+vb1ZUVFTkgAEDbmjD\nrFmzJsbFxcXlp59+cn7jjTfuWyI2RFxcnGVOTg69/PLLKbVq1coCgCZNmtxNOyYmxqpGjRoZXbt2\nTTUzM0NISEhWmzZtjHZKzZs3T2/evHm67rxevXrXtm/f7vjtt9+6Pvfcc6k6d19f3yzdSkrjxo0z\nNmzYcH3Xrl1OAK5o46tXr17myy+/nDhlypSq/fr1u2lsqX3hwoU+ixYt8hZCICMjw8zPzy/rt99+\nO2soLJOfQ4cOOezbt89x0aJlUk28AAAgAElEQVRFF0eMGGGw3lhYWIgPP/zw8iuvvBI4bty4aw0a\nNMg3YElNTTX74osvvFatWnX+hRdeuAUAtWvXzkpMTLzy7rvvVvvkk0+u6Md569YtszVr1nh8/PHH\nsS+99NJNAFi8ePHlPXv2OKakpOTrny0tLcW6deuibW1tBQAMGjQoccmSJZ7aMBkZGWYrVqyIrl+/\nfiYArF69+mJoaGj9X3/91bF79+6pc+bM8e7cuXOKTkFq2LBhZkJCguXMmTOrfvzxx/E6cy0PD4/s\nVatW3V2B+fvvv20LaiPnz5+3rlatWqbu+qIwe/bseN3/WrVqZd28efPykCFDAnNzc6PNzc0RFxdn\nVb9+/Tvt27e/DQAhISFZHTt2vA0AN27cML9165Z5jx49burKQ79ctPj6+ubY2Njk6WbCDYUpSjk2\naNDg9vz58+8rV6Zo1KtXL2PlypXmFy5csCos70+cOGH9008/uX3zzTcXXnnllRR1fWaHDh1uG4q7\nsP5dn6VLl7qlpKRYHD58+JTONHX9+vUXQkJCGi5btsz1zTffTAYAIQQWLlwYpxvsTp069UqHDh1q\nnzx50jo0NNTk/T65ubn47LPPYrXPlJkzZ/q+8cYbVydMmJConDKXL18eHRoaWv/o0aM2oaGhGXPm\nzPGZNm3apddff/06ANStWzcrOzs77oUXXghZunRpXGRkpI0ub02VRUePHj1Stedffvnlpc2bN1dZ\nu3aty7Rp067GxMRY5uXlYcCAASnVq1fPBoCmTZveTSc2NtY6KCgoo3Pnzmm6Z2a7du0MPjMdHByE\np6dnDgB4eHjkGGuXc+bM8QwJCclYvnx5nM5t1apVMb6+vs7Lly93HT9+fKKx/GTKBl6BYCotQuQf\ni/zwww/nDxw4cDI8PDwxPT3dDJDmQj169Kjh7+9f38HBobGjo2PjtLQ085iYGCuDkRrgscceS2/V\nqtWtxo0b1+vYsWPQhx9+6BkVFXV3emro0KFJZ86csa1evXr98PBw/4iIiCoF2TunpqaaDR8+3C84\nOLies7NzIzs7u8a7du1yjouLyydT3bp183Vwvr6+2UlJSQanxT766KMrKSkpFnPmzLlvZlrHgAED\nrh04cODkwYMHT27evPlMcHBwerdu3UJSUlK4nRdCjRo1MgIDAzPmz5/vEx0dbXhqEkD//v1vNGrU\n6Pbbb799n0nZkSNHbDIyMsxefvnlIJ3pg52dXeNx48ZVT0tLM79y5cp9EzaRkZHW2dnZ9OSTT+Zb\n0WrWrNl9g6HAwMAMnfIASAU0OTk5n6wuLi45OuUBkApClSpVco4fP24LAFFRUbatWrXKNzjo0KFD\namZmJp08efKuiUaDBg1ua823CmsjQohi2/+vWLGiSrNmzWp5eno2tLOza/zaa6/VyM7Opri4OEsA\nGD58eOLvv//uEhISUu+VV16ptm7dOqfcXLmg4eHhkdunT5+k559/PqR169YhkyZN8j527Jh1gQkW\nQlHKsUmTJgYHrUzR0PX1V65csSgs7/fv328HAN27d79pStyF1V19IiMjbYKCgjK0+9qqVauWExAQ\nkKEblAMAEaFFixZ3+3B/f/8sdQ9G4zaEubk5nnjiibvx5OXlITIy0m7x4sXe2jxo0aJFXQA4deqU\n9YULFyyTkpIsJ0yY4K8N89JLLwUJIXDq1Clr3apjcYiNjbUIDw+vHhAQUN/R0bGRnZ1d47i4OGvd\nc7VNmza3w8LCUuvVq1e/c+fOQTNnzvS8ePHi3ft+7bXXEv/77z/7GjVq1O/fv7//ypUrq2RmZpZo\nj9DRo0ftjxw5Yq+9X0dHx8ZJSUmW586du9vm9fOTKTt4BYKpdNStWzfTzMwMJ0+ezLfBS/fWJVdX\n17vmEM8++2yIi4tLzoIFC2IDAgKyrK2tRdu2bWtnZWXdHTQT0X3KSHZ29t3OzMLCArt27Tq3a9cu\nuy1btjht3LjRZebMmVWXL19+vl+/fjdbtmyZHh0dfXzjxo1O27dvd5wwYYL/hx9+mHvw4MFThkys\nhg8fXnXr1q1VZs6cGVevXr0MR0fHvNGjR1dNTU3N196srKzyCWVITh1eXl65b731Vvy8efN83njj\nDYNv7nB1dc3VDR7r16+fWadOnejq1auHLl++3HXs2LFJBiNmAABubm4569evv9ChQ4earVu3rvXn\nn3+erVmzpkH74Llz58a1a9eujv5rH3NzcwkAIiIiLhia9dPNshmCqPBna1HqS0mxs7PLV68LayPB\nwcEZBw8edMjIyKCirEJs377d/tVXXw0aMWJE/OzZsy+5u7vn7N6922HkyJEBugFHr169brVq1eq/\nn3/+2XnXrl2Ow4YNC5w7d2763r17z1hYWOC7776LOXjw4NXffvvNefv27U6zZ8/2nTVrVuw777xT\nrDpflHI0ZirFFI3IyEhbBweH3JK0IWMUVneLK7OZmRm0bzDStWHdPZiKlZVVnjYeIQSEEDRmzJjL\n/fv3T9EP7+/vn52QkGABAHPmzIlt27btfea0QUFBWTqzHqX0FOk++/TpE3jjxg2LWbNmxQUHB2fa\n2tqK559/PigrK4sAwNLSEvv27Tu7Y8cO+y1btjht2LDBdcaMGX5r1qw537Nnz1tt2rS5c/Hixf/U\nM9Np3Lhx/jNnzsw5ePDg6eK+bSsvLw9t2rS5+cknn1zS93Nzc7s7JtDPT6bs4JlJptLh5eWV27p1\n65tff/21l3YzpT4JCQnm58+ft3nnnXfie/Xqdatp06YZtra2edevX8/Xe7i6uuZoX3Ganp5OUVFR\n+ZQTMzMztGvX7s7//ve/hEOHDp0JCwtLjYiIcNf5Ozs75w0YMOBGRERE3MGDB09euHDBxtjmrH/+\n+cfh+eefTx4yZEjK448/nl6nTp3MixcvlvhtF+++++41Ozu7vPfee8+k95vrOlHdag1TML6+vjm7\nd+8+4+LiktOmTZtax48fNziT3aZNmzvPPPPMdf2N7U2bNk23trYW58+ft6pfv36m/mHooVavXr1M\nS0tLsXv37nzKyOHDhwt965YhUlJSLCIjI+/K/d9//1nfuHHDon79+ukAEBwcnL5nz5589Xbbtm2O\nNjY2eXXr1i3Q7KKgNjJo0KDkjIwMs+nTpxt8S5Wxjfy7du1yqFKlSs6nn356pX379rcbNmyYeenS\npftmcL28vHJfe+2162vWrInZsGHDuYMHDzocOXLEVucfFhaWMXXq1Ku7d+8+17t376SIiAijK3WF\nUZxyZIrPxYsXLX/++WfXp59++oYpea+b9d+4caOzqWkU1r9rqVevXsb58+dttJt34+LiLKKjo210\n7agsMTc3R506de6cOnXK1lAeODk55QUFBWW5urrmnD171tpQGFtbW+Hv75/z+OOPp3711Vde+i/n\nAORzMDU19T73vLw8HDp0yOH111+/2q9fv5thYWEZPj4+OVeuXMnXH5qZmaFDhw63Z8+eHX/kyJHT\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f37ad0ceb50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# TODO：从sklearn中导入三个监督学习模型\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.naive_bayes import GaussianNB\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "# TODO：初始化三个模型\n",
    "clf_A = DecisionTreeClassifier(random_state = 157)\n",
    "clf_B = GaussianNB()\n",
    "clf_C = KNeighborsClassifier()\n",
    "\n",
    "# TODO：计算1%， 10%， 100%的训练数据分别对应多少点\n",
    "samples_1 = int(len(X_train) * 0.01)\n",
    "samples_10 = int(len(X_train) * 0.1)\n",
    "samples_100 = len(X_train)\n",
    "\n",
    "# 收集学习器的结果\n",
    "results = {}\n",
    "for clf in [clf_A, clf_B, clf_C]:\n",
    "    clf_name = clf.__class__.__name__\n",
    "    results[clf_name] = {}\n",
    "    for i, samples in enumerate([samples_1, samples_10, samples_100]):\n",
    "        results[clf_name][i] = train_predict(clf, samples, X_train, y_train, X_val, y_val)\n",
    "\n",
    "# 对选择的三个模型得到的评价结果进行可视化\n",
    "vs.evaluate(results, accuracy, fscore)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----\n",
    "## 提高效果\n",
    "\n",
    "在这最后一节中，您将从三个有监督的学习模型中选择 *最好的* 模型来使用学生数据。你将在整个训练集（`X_train`和`y_train`）上使用网格搜索优化至少调节一个参数以获得一个比没有调节之前更好的 F-score。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题 3 - 选择最佳的模型\n",
    "\n",
    "*基于你前面做的评价，用一到两段话向 *CharityML* 解释这三个模型中哪一个对于判断被调查者的年收入大于 \\$50,000 是最合适的。*             \n",
    "**提示：**你的答案应该包括评价指标，预测/训练时间，以及该算法是否适合这里的数据。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**回答：**\n",
    "\n",
    "决策树对于判断被调查者的年收入大于$ 50,000是最合适的。\n",
    "\n",
    "- 对于训练数据，决策树的准确率和F-score都是最高的，超过了0.9；使用更客观的交叉验证评分时，决策树和kNN的准确率和F-score都是比较高的，分别达到了0.8和0.6。\n",
    "- 预测和训练时间上来看，决策树有绝对的优势，尤其是预测时，决策树花费的时间相对于kNN完全可以忽略不计，数据规模增大时更加明显。\n",
    "- 这里的数据，每个特征都能提供一定的信息增益，尤其是学历、工作时长，而且是一个分类问题，因此决策树适合这里的数据。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题 4 - 用通俗的话解释模型\n",
    "\n",
    "*用一到两段话，向 *CharityML* 用外行也听得懂的话来解释最终模型是如何工作的。你需要解释所选模型的主要特点。例如，这个模型是怎样被训练的，它又是如何做出预测的。避免使用高级的数学或技术术语，不要使用公式或特定的算法名词。*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**回答： ** \n",
    "\n",
    "决策树就像一个垃圾分类器，预测的过程就像分捡垃圾，先分厨余垃圾和其他垃圾，其他垃圾再分可回收和不可回收，这样子就可以把新来的垃圾分到合适的位置。\n",
    "\n",
    "训练就是在选择第一步以什么标准分，两个分支里，第二步又以什么标准分，直到分完为止。第一步选择用厨余垃圾作为标准的原因是，可以用一个局部的性质，就把垃圾分成整体性质都很不同的两类，达到最大的分捡效率。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 练习：模型调优\n",
    "调节选择的模型的参数。使用网格搜索（GridSearchCV）来至少调整模型的重要参数（至少调整一个），这个参数至少需尝试3个不同的值。你要使用整个训练集来完成这个过程。在接下来的代码单元中，你需要实现以下功能：\n",
    "\n",
    "- 导入[`sklearn.model_selection.GridSearchCV`](http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html) 和 [`sklearn.metrics.make_scorer`](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html).\n",
    "- 初始化你选择的分类器，并将其存储在`clf`中。\n",
    " - 设置`random_state` (如果有这个参数)。\n",
    "- 创建一个对于这个模型你希望调整参数的字典。\n",
    " - 例如: parameters = {'parameter' : [list of values]}。\n",
    " - **注意：** 如果你的学习器有 `max_features` 参数，请不要调节它！\n",
    "- 使用`make_scorer`来创建一个`fbeta_score`评分对象（设置$\\beta = 0.5$）。\n",
    "- 在分类器clf上用'scorer'作为评价函数运行网格搜索，并将结果存储在grid_obj中。\n",
    "- 用训练集（X_train, y_train）训练grid search object,并将结果存储在`grid_fit`中。\n",
    "\n",
    "**注意：** 取决于你选择的参数列表，下面实现的代码可能需要花一些时间运行！"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python2.7/dist-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Unoptimized model\n",
      "------\n",
      "Accuracy score on validation data: 0.8198\n",
      "F-score on validation data: 0.6366\n",
      "\n",
      "Optimized Model\n",
      "------\n",
      "Final accuracy score on the validation data: 0.8618\n",
      "Final F-score on the validation data: 0.7424\n"
     ]
    }
   ],
   "source": [
    "# TODO：导入'GridSearchCV', 'make_scorer'和其他一些需要的库\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.metrics import make_scorer\n",
    "from sklearn.model_selection import KFold\n",
    "# TODO：初始化分类器\n",
    "clf = DecisionTreeClassifier(random_state=156)\n",
    "\n",
    "# TODO：创建你希望调节的参数列表\n",
    "parameters = {\"max_depth\":[i for i in range(1, 15)]}\n",
    "\n",
    "# TODO：创建一个fbeta_score打分对象\n",
    "scorer = make_scorer(fbeta_score, beta = 0.5)\n",
    "\n",
    "# TODO：在分类器上使用网格搜索，使用'scorer'作为评价函数\n",
    "grid_obj = GridSearchCV(clf, parameters, scorer, cv = 5)\n",
    "\n",
    "# TODO：用训练数据拟合网格搜索对象并找到最佳参数\n",
    "grid_obj.fit(X_train, y_train)\n",
    "# 得到estimator\n",
    "best_clf = grid_obj.best_estimator_\n",
    "\n",
    "# 使用没有调优的模型做预测\n",
    "predictions = (clf.fit(X_train, y_train)).predict(X_val)\n",
    "best_predictions = best_clf.predict(X_val)\n",
    "\n",
    "# 汇报调参前和调参后的分数\n",
    "print \"Unoptimized model\\n------\"\n",
    "print \"Accuracy score on validation data: {:.4f}\".format(accuracy_score(y_val, predictions))\n",
    "print \"F-score on validation data: {:.4f}\".format(fbeta_score(y_val, predictions, beta = 0.5))\n",
    "print \"\\nOptimized Model\\n------\"\n",
    "print \"Final accuracy score on the validation data: {:.4f}\".format(accuracy_score(y_val, best_predictions))\n",
    "print \"Final F-score on the validation data: {:.4f}\".format(fbeta_score(y_val, best_predictions, beta = 0.5))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题 5 - 最终模型评估\n",
    "\n",
    "_你的最优模型在测试数据上的准确率和 F-score 是多少？这些分数比没有优化的模型好还是差？你优化的结果相比于你在**问题 1**中得到的天真预测器怎么样？_  \n",
    "**注意：**请在下面的表格中填写你的结果，然后在答案框中提供讨论。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 结果:\n",
    " \n",
    "| 评价指标         | 天真预测器           | 未优化的模型        | 优化的模型        |\n",
    "| :------------: | :-----------------: | :---------------: | :-------------: | \n",
    "| 准确率          |      0.2478          |       0.8198        |    0.8618      |\n",
    "| F-score        |       0.2917        |        0.6366     |       0.7424      |"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**回答：**\n",
    "\n",
    "- 最优模型在测试数据中的准确率是0.8618, F-score是0.7424\n",
    "\n",
    "- 这些分数比没有优化的模型好\n",
    "\n",
    "- 相比于天真预测器，准确率和F-score都有大幅的上升"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----\n",
    "## 特征的重要性\n",
    "\n",
    "在数据上（比如我们这里使用的人口普查的数据）使用监督学习算法的一个重要的任务是决定哪些特征能够提供最强的预测能力。专注于少量的有效特征和标签之间的关系，我们能够更加简单地理解这些现象，这在很多情况下都是十分有用的。在这个项目的情境下这表示我们希望选择一小部分特征，这些特征能够在预测被调查者是否年收入大于\\$50,000这个问题上有很强的预测能力。\n",
    "\n",
    "选择一个有 `'feature_importance_'` 属性的scikit学习分类器（例如 AdaBoost，随机森林）。`'feature_importance_'` 属性是对特征的重要性排序的函数。在下一个代码单元中用这个分类器拟合训练集数据并使用这个属性来决定人口普查数据中最重要的5个特征。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题 6 - 观察特征相关性\n",
    "\n",
    "当**探索数据**的时候，它显示在这个人口普查数据集中每一条记录我们有十三个可用的特征。             \n",
    "_在这十三个记录中，你认为哪五个特征对于预测是最重要的，选择每个特征的理由是什么？你会怎样对他们排序？_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**回答：**\n",
    "\n",
    "优先级从高到低\n",
    "\n",
    "- 特征1:occupation。工资是大多数人最主要的收入来源，工作能极大地影响年收入。\n",
    "- 特征2:age。拥有多年工作经验的人往往收入更高，涨薪也需要时间的积累。\n",
    "- 特征3:education_num。受教育时间更长的人，往往家境更好，能力更出众，找好工作也更容易。\n",
    "- 特征4:education_level。同上，受过更高等教育的人，家境更好，工作报酬更丰厚。\n",
    "- 特征5:hours-per-week。工资高的计算机、金融行业，往往加班更多，工作时间长。因此工作时间长，应该年收入也相应提高。不过也可能是低级劳动者，只能靠更长的工作时间来维持生计。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 练习 - 提取特征重要性\n",
    "\n",
    "选择一个`scikit-learn`中有`feature_importance_`属性的监督学习分类器，这个属性是一个在做预测的时候根据所选择的算法来对特征重要性进行排序的功能。\n",
    "\n",
    "在下面的代码单元中，你将要实现以下功能：\n",
    " - 如果这个模型和你前面使用的三个模型不一样的话从sklearn中导入一个监督学习模型。\n",
    " - 在整个训练集上训练一个监督学习模型。\n",
    " - 使用模型中的 `'feature_importances_'`提取特征的重要性。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAFgCAYAAAArYcg8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3XucFXX9x/HXB1ZFvIAiaLIoIIiA\nEtCiqGmZF7wkZnkh76VpqaWVmJWRmRSllaaZWhmoKQqm8itF01RUVC6KpusFEJTFG6KoqNw/vz8+\n37OcPZxld3Hv834+Huexe2a+M/M9Z2a+85nvZY65OyIiIiKSHW2aOgMiIiIi0rgUAIqIiIhkjAJA\nERERkYxRACgiIiKSMQoARURERDJGAaCIiIhIxigAbEHM7BQzczNbYmZbFcwrSfMuaqLsbbC8z9U9\nb9p8MxvblHkokuZaM/vEzDYumH5sWva2IstMMLNFZmZ1zM8G7Usz+2Ja9oAa0nU0s4vMbHBdt7Ge\ndR5uZv8zs2UpDx3ra91FtuXVvG7KS1NhZn+tp+19qS77I227WP4eykvzhJlNro/81SFf41M+5lYz\n/9dp/qoG2HZJOub2rWX6bxd8dx+a2dNpeoNfu8xsjJkty3vfLuXjgjqu5zwzG17T+htDke80//X5\nBtrmUWb2vYZYt3w6JU2dAdkgHYAfAXUqiFqYI4EPmjoTBaYApwO7A4/mTd8X+BjYp8gy+wCPeN0f\nuLknULEhmayljsDP0zae+rQrM7MS4B/AVOAsYAXw4addbw3GAtcWTFuU9//hwPv1tK0vAT8FLqrD\nMncDvyyYln9Mnwqs/nTZ2iBLgZ5mtre7P5abmIKqE4j91r4BtltCHHOriHOptoYT+7UD8HXgz8DW\nwK/qO4M1WE6cl6/VcbnzgH8Bkwqm/wn4Zz3ka0PkvtN8zzfQto4CyoA/NtD6ZQMpAGyZ7gO+a2Z/\ncPe3GmIDZraJuy9viHXXhrs/3VTbXo+H0999WTcA/Atwjpnt7O4vA5hZH2Bb6naxA8Ddn/iUeW1s\nXYEtgNvcvc6ft5CZtQXM3ddXE7Vwfd9TbY6hBj7OF9WQv4a64NbkLeAZ4ETgsbzpXwI+A9wMHNcE\n+arO0+6euxm618x2Bs6lmgAw1bZv5O4r6jMT6Sau3s5Ld18ALKiv9dVR/nfa4tSyfJAaqAm4Zbok\n/b2wpoRmtruZ3W9mS83sIzN7wMx2L0gzNjVZ7WlmU83sE+C3ad58M7vJzE40s5dSE+gjZtbbzDZL\nzaKLzewtM/tdqgnKrbedmf3BzJ5L23/TzP7PzHapRb4rm4DNrPt6mi0eylumxMx+bGYvmtlyM3s9\n5aldwbp7mtm/zexji+bZK4BNaspTKjDnEQFfbl1bA/2Ji+ar+fPy/n84bxpmdrqZPZOaSt8xs7+l\n9eSnWacJ2My+nj7bMoum1uFm9lD+d5CnvZldldb/TtqHHXPfZ/ocAH/J+y5PSfOHpePg/bTfXjKz\nUdV9Lymf89Pbv+XvFwvfT+tYYWZvpHxtWeTzjjazC8xsHlGDuFt126wNK2gCNrPT0nb2NrPbzex9\nUgBkZkPTefJuOi7mmtmVad4lRO1fftPzp77wWF4TsJntaGZrzOz0IulGpX3eMW/asWY2LeX1PYum\n3a512PwNwDFWtTvDScADwOtF8rCJRZPlq2k/zrNozs0/3zeyaEJ+Je/YfsTM9kjn4Ccp6S/zvscN\nacWYAXTOHUOpXPmrRfPmy8BKYP80b4tUBuTyPdfMzjer2iXDopycmvK9oFi+rJomYDP7nJlNSsfO\nJ2b2gpmdl8sbcRN4at5nvibNK2xinmNmNxfZ7r5puUMKtvkvi+5An5jZFDPbcwO+y6LMbFsz+0s6\nX5ebWbmZfaMgzWdSmjkpD6+Z2Q1mtl1emvHAscBOeZ//xTQv1xy9XcF6q2t6H2VmPzOzV4nyoXcd\n8trVzP6Rl+b1tM+qdKXKGtUAtkxvAFcB55rZZe7+arFEZjaACD7KgVMAJ5qNHzazoe7+TF7yDsB4\n4DLgJ6wtrCECmZ2IZueNgcuB24FXgDnAiJTmQmAucHVabhOiVuiSlOetgTOBx82sr7u/WYfPW1i4\n9QeuA17Im3YT0ez3G6Ipsi/RBNcd+Fr6TjYG/gNsSjRVvg2cAXy1lnmZAnzVzNq6+2qiifdjohn1\nEeJ7yAUd+xJNkJXfs5mNAX5INIeMJGrOLgF2NbO90jrXYWYHEk2sk4AfAJ2J/dAOeLnIIlcQzU7H\nAX2IgH41cDLxfX6VaH76NWubpuaaWc/0fiJwMWsL2p7r+U7+CjwHTEif5d+sbeocDfyYaO76P6Af\nsU8+a2ZfcPc1ees5hTimzgM+okggUsDyAxCAWtYI3EIE7H8G2ppZB+Ae4HEiCFpKHDNDU/priP10\nCmuPw9o06a+TP2B1se4A7v6qmU0hmmCvK5h9AvB/7r4krfRc4PdErfPPieb8i4EHzWygu39ci7zd\nRhwjXwb+aWabEcfEGRQPvG8hzq1fErVg+wI/A3YAvpnSjCLOqR8Tx0MHorvE1kTz6ReI8uhaovke\n6t6cCtCDOC7zy6hDgCEpT4uBOelcvz+l/yVRVuxNHKMdWBvUb5fSvUrUiq4myrrta8qIRb+5+9O6\nv0ccs33SC+BQorx5lDjXIGpgi7kJGGlmm7v70rzpJwJvEi0/mNlQ4EFiP5wKLAPOBv5rZru7+/9q\nyjdx3Ocfm2ty52IKih5P0y8k9tFhxM1dibv/Jc3bhugucD7wDlBKlGlTzKy/u69My3cCdgGOTsvl\n77e6OAN4iaj9XQa8XYe8jk/5+AGwENgOOJAoP7PL3fVqIS/WBnG9iEJ1CXB9mleS5l2Ul35iStMx\nb9qWwLvAP/OmjU3LHlFkm/NT+g55076X0v+1IO1TwIPryX9bom/Rh8D3i3yu7gXbHVvNejoTgcJU\noF2atk9ax0kFaY9P0wem999K74fmpWlD9H+pkodqtv2NlK4svf8dcH/6/3Rgfl7aV4F/573vTlxc\nRhWsc++0zq/kTSvcl1OJi6rlTftcSvdQ3rQvpmnjCrZxFVFoWl5eHDitIN1RafqWdTw2e6XlTsmb\nlrvwjy1Ie0JKO7zg874ObFrL7Xk1r155aSryj1HgtJTm0oJ1DU3T+61ne5eQWgFrmb+KavL3xbw0\nTwCT896fCqyh6nmQy9vw9L4jERxfXbC9nYm+dd+uIV/jgTnp/9uAO9P/JxFBe3tgDLAqb5mylIcL\nin0nQJ/0/n7g5vVsu11Kf2Etv8Nvp/Q7EuVbJ+C76Tsan5fuTaJM2aZg+W+ltHsUTP8lEYR0zDuH\nPwG2y0vTgSg7lxXJ/wV506YRZVG79XyONykoK9P0MQXr3ymt/+SCbS4Bfp837THiprIkb9pGxM33\n+OryUfCdFr7uz0szOh1j3QuWvZE4R9tUs+4S4mbRgUOKHXPV5GW7gumF30vue58PbFyQtsa8Akbc\nMJxe2/M3Ky81AbdQ7v4uUXCdZNHXrJh9gX95qjlIy31A1PB8oSDtSqLGqJjH3T2/M/2L6e+9Bele\nBLrlTzCzY8zsSTNbQlygPgI2Z+0dcp2ku/o70tsj3D3XVHAwcZJPtGgKLkl3uPel+bnm2D2BBZ7X\nN8vjznedEbzVyPVv2zfv7yPp/0eBHc2sm5ntSNSO5Df/HkgUSP8oyOOTxAWs6OhIi/4uZcDtnkq3\nlO+ZrG3KLfTvgvf/I2pkt63h880ijoXxFqP3utSQfn2GEjXGNxVMH08cC4XH4GR3r0vtwPVErU/+\nqzZ9qu4oeP8SEfz8xcyON7PSOuRhff5VJH8z15N+AhEwn5A37USiduWe9H4fIkgrPIZeSa9ajbBN\nbgAONbNORAB4uxevPcyts3A/3lQwfzrwFTO72Mz2MrON6pCX9ZlPHJPvAH8A/k4ED/kecfd3CqYd\nTNSOzyxSJrQjaichyoRHPK9FIpV397AeFk3yQ4Ab8sqhDebuc4kbvRPzJh9OBKM3pm1umfJ7a3qf\n+0wO/Jfa7//DqHpcnpk372CiLKso+N7uJfqI9krbNjP7nkV3lKXEPsq1RmxQ+V6Du33dfp015jWV\nmTOBn5jZ2WbWvwHy1iIpAGzZ/kDUzl1czfytiea+Qm8ChX0fFnk1zY/AewXvV6xnemWVupkdThRU\nLxBNkXsQhc0iNrzq/a/ArsBh7p4/iq0LEWx8RBREudfbaX6n9PczFG+CqdVgmlRILwT2NbPNgUGs\nDQBfIJqfvsDagjh/QEQumJpTkMeVRFN5J4rbhrjDf7vIvOry/W7B+9xAh/V+7+4+BxhGlA03Am9a\n9FUrDNZqI9evscox6NFMuzhvPsXS1cIb7j6j4FWbAR2F+XkP2I/4Lq8BFqSL2lfqmJ9Ci4vkr9qR\n0enm7C5SAJgCqGOJWp2VKVnuGHqUdY+h3lR/DBUzmTiHzyM+/w3VpMvtp8IuG28WzL+IqJE5iqil\neif1zfq0/axywcouwGbufmr+TW1S7NjpQgQihd9T7pz8tGVCbvn6HExxI7Cfre3PeSLwnK8d0NSZ\nqNEazbqf6zRqv/+fLTgu87uRdAEOKrL+G9P83DbOI7qh/Jt4asPurL2pa4im1er2cW3yeiRxvP8U\neM6if/CPzer2eK7WRn0AWzB3X2pmvyZqAi8tkuRdoq9Doe1YN3jzIuk+rRFE1f8puQnpolZ44a8V\nM/sJ8RiIQ9z9hYLZi4kmzmKPYoG1/cneIPoPFqqpZizfFKLQ+TzRxPQERPugmT1KBH9G9A3Mr/FZ\nnP4exLrff/78Qu8QhVqx2rht2bB+VNVy9weJ/mSbEM3TFwP/NrPuRWpZ1icXhG5H3iMm0h16J9YN\nUhviGCxmne24+1NE384SItj4KVGbvKu7v1iYvgHdCBxrZkOIwKQTay9msPYYOQ6YXWT5Wj86yd1X\nmdktRB+uCuChapLm9tO2xM1Pznb581PwPRoYbWafIR418jvixuzk2uariGe95hGrxY6dxUTt7glF\n5kHUmEKUCcXO/5rKhNy+qMvgm5rcSvTNPM7MridquPIH++X2xe+ImvRC9XEOLSZuUkdWMz93Powg\nauUqB8WYWd86bCdXa7pxwfTqgtjq9nGNeU21u98Gvm1m/YiuPL8ibmL+Xoc8tyoKAFu+q4mOrZcU\nmfcw0cSzRa7mwcy2IJoVHmqEvLUnmvrynUj0BawTM/sa8Rm/7e73F0kymei43cHdH1jPqh4HvpEG\nwTyR1t0GOKYO2ZlCBKLfAZ4qaDZ7lLgTN2BqXs0NRGfwNcAO7v6f2m7M3Veb2Qzga2Z2Ua4Z2Mw+\nR3Rw35AAMFdTtul6truc6Fi+OVEz1YMIRmvrCaJWeAQxujTnWKLseagO62oUqXbycYtRz4cRA4le\nJH1fZrZpHZup6+peoqb3RCIAfMndp+XNn0L0V+vp7rfUw/b+SvQH/Xd+94ICuW4MI4jAI+f4gvmV\n3P0N4FozO4KosYc4Fpz1HHP1bDIRQL2Xau6r8zhwppltl2sGTgODDlnPMrj7EjObRnTDGbOe2ufl\n1PIzu/t7ZvYvYv9/TJSV/yiY/yQwABi5nn32aUwmDchKXY2q0564Mc33jSLpqvv8ucGLu5LKsHTT\nuX8D5LWSu5cTg23OZO2xmUkKAFs4d19uZhez7shBiM7OXwYeMLPfEIXvj4gTt7pm4/o0megT9Aei\nP1QZ0Ym7sPlmvdLI1BuIvjvPplFwOR+4e7m7P5RqMyaa2e+JztlriIvbocCPUjPHOGIk9D9TjeLb\nxJ1hlceS1CDXhHQ4VS+IEM3BudrYKn2m3H1u2g9XpX6bDxN3wd2I/oF/TbVvxfw8ff47zOw6oln4\nIuIOdk01y6zPW8Td8wgze5ZoOp9HjNTbl3iI8YK0nR8TNajP1WUD7v6umf0O+LGZfZTW2ZcI5B9l\n3X6KTSIFKd8E7iT6m21OjDT8gOifCTGSHuA8M7uPGCSxvv58GySvVu6ElI9fFsx/1+IxJL8zs+2J\ngPFDohZqP+Aed59Yh+09B6y3qdvdZ5rZHcCvLB7nMo2oaf8x8Hdf+9zLe4jv62niHC8jni34h7Se\nNWb2EnCEmf2XGCFf4bV/GkBd/Z2oeXwwHYfPEf1gexG1k8NSt5dLiQEj/0ll6SqijPiQmpsyf0Dc\n3DyWyrnX0/r7uvsPUppyoln3UKK8edvd13fTdiPRT/XHwH/dfWHB/HOJ/n53Wzwq602iabgMWOnu\nP6shzzX5LdGM/6iZXU7069uCOHf3cPevpXSTiefRnk8MABxG8WOpnAiSTwWeBT72eAbmY0QZ84cU\n+K0hrg916ZpWY17NbFviBvZmokZ4dVpmU+KmPLs+zQgSvRr3Rd4o4ILpJcSBX2XkaJq3BzE6bylx\nkX8A2L0gzViiIC62zfnATQXTvpi2dcD61kOcyJcQheLHRMAziIIRvtQwCjhve8VeDxVs7xxihNwy\n1j6C5bdUHcXckwhGPib6I15BPGKgSh5q2BdvUzCSNU3fKH3PDnyhmmVPJGrHPkr75QVilG5pXppi\n+/I4ogBbTjSpHklcbO+oxb4p9h1/hSicV6Z5pxAdzO8iCublRPPYBNJIz/V8H+uMAk7TDfh+yveK\ntL4/UTDKOC17SR3OhRrTU/0o4O4F6foSg4DmpePmbSI4LSs4x65Jx8sa8kbJrmfbY2tIU2UUcN70\n3OjuNcCO1Sx7BHE+fZiO49lEbV5N+6noiMyCNGMKPx8ROI0hampWpO/qIqqORP0xEQC+m/L0ItF8\n2bbg+JyVjq0qI2qL5CM3SrS0hvwWHWWb5rUnyqCX0zYXpzyOouqI+t2JARjL07F/AdWPRi0cDT2E\nKE/eT5+7HPhB3vzdiGDn47T8NXnf87Iied6YqGl3Cp5qULDOCel4zOX5DuCgGr6r2n6nnYhHVeWe\nufdWOt7OzEuzOfEookXEzdKdxGj0Kt8RcXM9gbgpcODFvHmfJW6alxJl/tnr+d6Ljh6vKa/AZimf\n5Wk77xPn3tHr+w6y8Mo9EkJEWpg0WnUOMNrdC39yTEREpFoKAEVaADPblHj47/1E7UBPovP+tkB/\njz5XIiIitaI+gCItw2pi1OVVRJPHR0TTydEK/kREpK5UAygiIiKSMXoQtIiIiEjGtMom4G222ca7\nd+/e1NkQERERaVQzZ858x90715SuVQaA3bt3Z8aMGU2dDREREZFGZWav1pxKTcAiIiIimaMAUERE\nRCRjFACKiIiIZEyr7AMoIs3XypUrqaioYNmyZU2dFdkA7dq1o7S0lI022qipsyIin4ICQBFpVBUV\nFWyxxRZ0794dM2vq7EgduDuLFy+moqKCHj16NHV2RORTUBOwiDSqZcuW0alTJwV/LZCZ0alTJ9Xe\nirQCCgBFpNEp+Gu5tO9EWgcFgCIiIiIZowCwmZo8eTJ9+vShV69ejBkzZp35v//97+nXrx8DBgxg\n//3359VX47mPs2bNYs8996R///4MGDCAW2+9tbGzLlInNs7q9VUbbdu2ZeDAgZWv+fPn1znfS5Ys\n4eqrr67zcrXh7myzzTa89957ALzxxhuYGY8++mhlms6dO7N48eJq1zFp0qSiZUe+hx56iC9/+ctF\n511++eV8/PHHG5B7EWkJFAA2Q6tXr+ass87innvuoby8nFtuuYXy8vIqaQYNGsSMGTN49tlnOeqo\nozj//PMBaN++PTfccAPPP/88kydP5txzz2XJkiVN8TFEmq1NN92UWbNmVb425KcjNzQAXL16dY1p\nzIyhQ4fy+OOPAzB16lQGDRrE1KlTAXjppZfo1KkTnTp1qnYdw4cP54ILLqhz/nIUAIq0bgoAm6Fp\n06bRq1cvevbsycYbb8yIESO46667qqTZb7/9aN++PQBDhw6loqICgJ133pnevXsDsP3229OlSxcW\nLVrUuB9ApAVavXo1I0eOZMiQIQwYMIBrr70WgKVLl7L//vszePBgdtttt8pz8YILLmDu3LkMHDiQ\nkSNHrlObdvbZZzN27Fggfp7yRz/6EYMHD2bChAnMnTuXgw8+mM997nPss88+vPjii+vkZ6+99qoM\n+KZOncr3v//9KgHh3nvvDcCiRYv42te+xpAhQxgyZAiPPfYYAGPHjuXss88GYO7cuQwdOpTddtuN\nCy+8kM0337xyO0uXLuWoo45il1124fjjj8fd+eMf/8jrr7/Ofvvtx3777VefX7OINBMKAJuhhQsX\n0q1bt8r3paWlLFy4sNr0f/vb3zjkkEPWmT5t2jRWrFjBTjvt1CD5FGmpPvnkk8rm3yOPPBKI86hD\nhw5Mnz6d6dOn85e//IV58+bRrl077rjjDp566ikefPBBfvjDH+LujBkzhp122olZs2Zx6aWX1rjN\nTp068dRTTzFixAhOP/10rrzySmbOnMlll13GmWeeuU76vffeuzIAnDZtGkceeSQLFiwAIgDca6+9\nADjnnHP4/ve/z/Tp07n99ts57bTT1lnXOeecwznnnMP//vc/SktLq8x7+umnufzyyykvL+eVV17h\nscce43vf+x7bb789Dz74IA8++GDdvlwRaRH0HMAW7qabbmLGjBk8/PDDVaa/8cYbnHjiiYwbN442\nbRTni+TLNQHnu++++3j22WeZOHEiAO+//z6zZ8+mtLSUn/zkJ0yZMoU2bdqwcOFC3nrrrTpv89hj\njwWixm3q1KkcffTRlfOWL1++TvohQ4bw9NNP89FHH7Fy5Uo233xzevbsyZw5c5g6dSo//OEPAbj/\n/vurdBH54IMPWLp0aZV1Pf7449x5550AHHfccZx33nmV83bffffKoDDXH/Lzn/98nT+fiLQsCgCb\noa5du1be6UM8OLdr167rpLv//vsZPXo0Dz/8MJtssknl9A8++IDDDjuM0aNHM3To0EbJs0hL5+5c\neeWVDBs2rMr0sWPHsmjRImbOnMlGG21E9+7diz4Hr6SkhDVr1lS+L0yz2WabAbBmzRo6duy4TgBa\nqH379vTu3Zvrr7+ewYMHA9Hd4+677+btt9+mT58+let74oknaNeuXd0/NFQpO9q2bcuqVas2aD0i\n0rKoaqgZGjJkCLNnz2bevHmsWLGC8ePHM3z48Cppnn76ac444wwmTZpEly5dKqevWLGCI488kpNO\nOomjjjqqsbMu0mINGzaMP//5z6xcuRKAl19+mY8++oj333+fLl26sNFGG/Hggw9WjrjfYost+PDD\nDyuX33HHHSkvL2f58uUsWbKEBx54oOh2ttxyS3r06MGECROACDyfeeaZomn32msvLr/8cvbcc08A\n9txzT6644gqGDh1a+Ty+gw46iCuvvLJymWKB5dChQ7n99tsBGD9+fK2+j8LPJyKti2oAm6GSkhKu\nuuoqhg0bxurVq/nmN79J//79GTVqFGVlZQwfPpyRI0eydOnSymakHXbYgUmTJnHbbbcxZcoUFi9e\nXNkBfezYsQwcOLAJP5FI9fxkb+osAHDaaacxf/58Bg8ejLvTuXNn7rzzTo4//ngOP/xwdtttN8rK\nythll12A6NO39957s+uuu3LIIYdw6aWXcswxx7DrrrvSo0cPBg0aVO22/vGPf/Cd73yHSy65hJUr\nVzJixAg++9nPrpNu77335oorrqgMAAcPHkxFRUWVfn5//OMfOeussxgwYACrVq1i33335Zprrqmy\nnssvv5wTTjiB0aNHc/DBB9OhQ4cav4/TTz+dgw8+uLIvoIi0LubePArf+lRWVuYzZsxo6myISBEv\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f37b0608e50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# TODO：导入一个有'feature_importances_'的监督学习模型\n",
    "\n",
    "# TODO：在训练集上训练一个监督学习模型\n",
    "model = DecisionTreeClassifier()\n",
    "model.fit(X_train, y_train)\n",
    "\n",
    "# TODO： 提取特征重要性\n",
    "importances = model.feature_importances_\n",
    "\n",
    "# 绘图\n",
    "vs.feature_plot(importances, X_train, y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题 7 - 提取特征重要性\n",
    "观察上面创建的展示五个用于预测被调查者年收入是否大于\\$50,000最相关的特征的可视化图像。\n",
    "\n",
    "_这五个特征的权重加起来是否超过了0.5?_<br>\n",
    "_这五个特征和你在**问题 6**中讨论的特征比较怎么样？_<br>\n",
    "_如果说你的答案和这里的相近，那么这个可视化怎样佐证了你的想法？_<br>\n",
    "_如果你的选择不相近，那么为什么你觉得这些特征更加相关？_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**回答：**\n",
    "\n",
    "- 权重加起来达到了0.73，超过了0.5\n",
    "- age，education-num，hours-per-week和我猜测的一致，marital-status，capital-gain和我猜测的不一致\n",
    "- 可视化验证了：\n",
    "    - 年龄增长带来的工作经验和阅历增长，可以影响年收入\n",
    "    - 教育时间，反映了家境、工作起薪和长远的发展，从而影响年收入\n",
    "    - 每周工作时间越长，相应的收入也越高\n",
    "- 更加相关的原因：\n",
    "    - 婚姻状况：拥有一定经济基础的人，才能吸引到配偶，进而结婚。结婚后也会更加负责，注意长远的发展，因此婚姻状况会极大地影响年收入\n",
    "    - 资本收益：资产丰厚的人往往更注重投资，注重非劳动收益；同时，资本收益也是年收入的一部分，也会影响年收入"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 特征选择\n",
    "\n",
    "如果我们只是用可用特征的一个子集的话模型表现会怎么样？通过使用更少的特征来训练，在评价指标的角度来看我们的期望是训练和预测的时间会更少。从上面的可视化来看，我们可以看到前五个最重要的特征贡献了数据中**所有**特征中超过一半的重要性。这提示我们可以尝试去**减小特征空间**，简化模型需要学习的信息。下面代码单元将使用你前面发现的优化模型，并**只使用五个最重要的特征**在相同的训练集上训练模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Final Model trained on full data\n",
      "------\n",
      "Accuracy on validation data: 0.8618\n",
      "F-score on validation data: 0.7424\n",
      "\n",
      "Final Model trained on reduced data\n",
      "------\n",
      "Accuracy on validation data: 0.8478\n",
      "F-score on validation data: 0.6971\n"
     ]
    }
   ],
   "source": [
    "# 导入克隆模型的功能\n",
    "from sklearn.base import clone\n",
    "\n",
    "# 减小特征空间\n",
    "X_train_reduced = X_train[X_train.columns.values[(np.argsort(importances)[::-1])[:5]]]\n",
    "X_val_reduced = X_val[X_val.columns.values[(np.argsort(importances)[::-1])[:5]]]\n",
    "\n",
    "# 在前面的网格搜索的基础上训练一个“最好的”模型\n",
    "clf_on_reduced = (clone(best_clf)).fit(X_train_reduced, y_train)\n",
    "\n",
    "# 做一个新的预测\n",
    "reduced_predictions = clf_on_reduced.predict(X_val_reduced)\n",
    "\n",
    "# 对于每一个版本的数据汇报最终模型的分数\n",
    "print \"Final Model trained on full data\\n------\"\n",
    "print \"Accuracy on validation data: {:.4f}\".format(accuracy_score(y_val, best_predictions))\n",
    "print \"F-score on validation data: {:.4f}\".format(fbeta_score(y_val, best_predictions, beta = 0.5))\n",
    "print \"\\nFinal Model trained on reduced data\\n------\"\n",
    "print \"Accuracy on validation data: {:.4f}\".format(accuracy_score(y_val, reduced_predictions))\n",
    "print \"F-score on validation data: {:.4f}\".format(fbeta_score(y_val, reduced_predictions, beta = 0.5))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题 8 - 特征选择的影响\n",
    "\n",
    "*最终模型在只是用五个特征的数据上和使用所有的特征数据上的 F-score 和准确率相比怎么样？*  \n",
    "*如果训练时间是一个要考虑的因素，你会考虑使用部分特征的数据作为你的训练集吗？*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**回答：**\n",
    "\n",
    "- 相比使用所有特征的数据，只用五个特征的数据，准确率略有下降，但是F-score下降的幅度较大，已经到了0.7以下\n",
    "- 即使要考虑训练时间，由于决策树的训练效率很高，相差的时间并不多，但是为此牺牲的F-score代价较大，因此对于这个应用，不会考虑只使用五个特征"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题 9 - 在测试集上测试你的模型\n",
    "\n",
    "终于到了测试的时候，记住，测试集只能用一次。\n",
    "\n",
    "*使用你最有信心的模型，在测试集上测试，计算出准确率和 F-score。*\n",
    "*简述你选择这个模型的原因，并分析测试结果*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Final accuracy score on the test data: 0.8545\n",
      "Final F-score on the test data: 0.7264\n"
     ]
    }
   ],
   "source": [
    "#TODO test your model on testing data and report accuracy and F score\n",
    "test_predictions = best_clf.predict(X_test)\n",
    "print \"Final accuracy score on the test data: {:.4f}\".format(accuracy_score(y_test, test_predictions))\n",
    "print \"Final F-score on the test data: {:.4f}\".format(fbeta_score(y_test, test_predictions, beta = 0.5))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最终准确率达到了0.8545, F-score达到了0.7264。\n",
    "\n",
    "我选择使用决策树，原因如下：\n",
    "\n",
    "- 受教育时间、年龄等因素都可以提供很多的信息增益，适用于决策树算法\n",
    "- 决策树已经广泛用于银行用户信用评估，和此处评估年收入的应用场景很相似，因此相信可以达到很好的效果\n",
    "- 决策树易于理解，这样向 CharityML 推荐这个模型的时候，更能让他们理解工作原理，从而增加他们对此的信任\n",
    "- 相对于kNN，决策树运行效率高，只需要很短的计算时间就可以完成训练和预测，便于大规模使用\n",
    "\n",
    "F-score超过了0.7, 说明查准率比较好，准确率也达到了0.85，大多数情况下都能准确预测，是一个相当不错的模型。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> **注意：** 当你写完了所有的代码，并且回答了所有的问题。你就可以把你的 iPython Notebook 导出成 HTML 文件。你可以在菜单栏，这样导出**File -> Download as -> HTML (.html)**把这个 HTML 和这个 iPython notebook 一起做为你的作业提交。"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
